package com.zw.mes.module.prodtaskmanager.controller;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.zw.mes.base.BaseController;
import com.zw.mes.common.JsonResult;
import com.zw.mes.module.prodtaskmanager.entity.*;
import com.zw.mes.module.prodtaskmanager.model.*;
import com.zw.mes.module.prodtaskmanager.service.ProdTaskService;
import com.zw.mes.util.IpUtil;
import com.zw.mes.util.ShiroUtils;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author 徐一贺
 * @className ProdTaskController
 * @description 生产任务排产控制层
 * @date 2021/1/11 16:01
 * @versron ver 1.0
 */
@Controller
@RequestMapping("/task")
public class ProdTaskController extends BaseController {
  @Autowired
  private ProdTaskService prodTaskService;
  /**
   * schedulingPage 跳转到生产令排产页
   *
   * @param
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/15 11:24
   */
  @GetMapping("/scheduling")
  @RequiresPermissions("pro:equipment:view")
  public String schedulingPage() {
    return "prodTaskManager/scheduling/page";
  }

  /**
   * commonPage 跳转到普通任务池
   *
   * @param
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/29 16:16
   */
  @GetMapping("/common")
  @RequiresPermissions("pro:other:view")
  public String commonPage() {
    return "prodTaskManager/common/page";
  }

  /**
   * 跳转到厂级计划编辑与反馈页面
   *
   * @param prodNo
   * @param model
   * @return
   */
  @GetMapping("/gotoFactoryPlanListPage/{prodNo}")
  @RequiresPermissions("pro:facPlan:edit")
  public String gotoFactoryPlanListPage(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrdModel prodOrdModel = prodTaskService.getProdOrdByPropProdNo(prodNo);
    model.addAttribute("prodOrd", prodOrdModel);
    model.addAttribute(
        "project", prodTaskService.getVwProjectByProCode(prodOrdModel.getProdProCod()));
    SysDeptModel deptModel =
        prodTaskService.getSysDeptByPrimaryKey(ShiroUtils.getUser().getDeptId());
    model.addAttribute("dept", deptModel);
    model.addAttribute("user", ShiroUtils.getUser());
    return "prodTaskManager/factoryPlanEditAndReturn/page";
  }
  /**
   * @methodName: gotoReturnAndTaskEditPage
   * @description: 跳转到设备类反馈和任五状态编辑页
   * @param: prodNo
   * @param: model
   * @return： java.lang.String
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/6 8:58
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @GetMapping("/gotoReturnAndTaskEditPage/{prodNo}")
  @RequiresPermissions("pro:retTask:edit")
  public String gotoReturnAndTaskEditPage(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrdModel prodOrdModel = prodTaskService.getProdOrdByPropProdNo(prodNo);
    model.addAttribute("prodOrd", prodOrdModel);
    model.addAttribute("project", prodTaskService.getVwProjectByProCode(prodOrdModel.getProdProCod()));
    model.addAttribute("prodPla", prodTaskService.getProdPlaByPropProdNo(prodOrdModel.getProdNo()));
    SysDeptModel deptModel = prodTaskService.getSysDeptByPrimaryKey(ShiroUtils.getUser().getDeptId());
    model.addAttribute("dept", deptModel);
    model.addAttribute("user", ShiroUtils.getUser());
    return "prodTaskManager/scheduling/returnAndTaskEdit/page";
  }

  /**
   * @methodName: gotoCommonPlanListPage
   * @description: 跳转到其他类计划反馈编辑页面
   * @param: prodNo
   * @param: model
   * @return： java.lang.String
   * @exception：
   * @author： 徐一贺
   * @date： 2021/3/25 19:22
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @GetMapping("/gotoCommonPlanListPage/{prodNo}")
  @RequiresPermissions("pro:otherRet:edit")
  public String gotoCommonPlanListPage(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrdModel prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute("tableItem", prodTaskService.findTotalDispatchPlanItem());
    ProdPla prodPla = prodTaskService.getProdPlaByPropProdNo(prodOrd.getProdNo());
    if (prodPla != null) {
      List<ProdPlaDet> prodPlaDetList =
              prodTaskService.findProdPlaDetListByPrpdPropId(prodPla.getPropId());
      model.addAttribute("prodPlaDetList", prodPlaDetList);
    }
    model.addAttribute("fou", ShiroUtils.getUser().getName());
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    model.addAttribute("creDat", formatter.format(new Date()));
    model.addAttribute("deptList", prodTaskService.findDeptList());
    return "prodTaskManager/common/editReturn/page";
  }

  /**
   * factoryPlanEditAndReturnPage 跳转到生产计划编辑与反馈页面
   *
   * @param
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/2/1 13:56
   */
  @GetMapping("/factoryPlanEditAndReturn")
  @RequiresPermissions("pro:productPlan:view")
  public String factoryPlanEditAndReturnPage() {
    return "prodTaskManager/factoryPlanEditAndReturn/page";
  }

  /**
   * factoryPlanEditAndReturnLoadProdList 加载审核通过的生产令列表
   *
   * @param
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/2/1 16:28
   */
  @ResponseBody
  @PostMapping("/factoryPlanEditAndReturn/loadProdList")
  @RequiresPermissions("pro:productPlan:edit")
  public JsonResult factoryPlanEditAndReturnLoadProdList() {
    return success().setData(prodTaskService.factoryPlanEditAndReturnLoadProdList());
  }

  /**
   * auditPage 跳转到总调计划科级审核页面
   *
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/27 9:03
   */
  @GetMapping("/audit")
  @RequiresPermissions("pro:proPlanCheck:view")
  public String auditPage() {
    return "prodTaskManager/audit/page";
  }

  /**
   * auditPage 跳转到总调计划部级审核页面
   *
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/27 9:03
   */
  @GetMapping("/ministerialAudit")
  @RequiresPermissions("pro:proMinisterialPlanCheck:view")
  public String ministerialAuditPage() {
    return "prodTaskManager/ministerialAudit/page";
  }

  /**
   * auditPage 跳转到排产记录变更记录页面
   *
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/27 9:03
   */
  @GetMapping("/changeQuery")
  @RequiresPermissions("pro:proPlanChange:view")
  public String changeQueryPage(Model model) {
    // 获取计划类别
    model.addAttribute("basePlanList", prodTaskService.findBasePlanOnlyList());
    return "prodTaskManager/changeQuery/page";
  }

  /**
   * schedulingList 获取排产任务池页的表格数据
   *
   * @param param 检索条件
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/15 12:43
   */
  @ResponseBody
  @PostMapping("/scheduling/list")
  @RequiresPermissions("pro:equipment:view")
  public JsonResult schedulingList(ProdPlaModel param) {
    startPage();
    return jsonResult(prodTaskService.schedulingList(param));
  }

  /**
   * commonList 获取普通任务池页的表格数据
   *
   * @param param 检索条件
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/29 16:34
   */
  @ResponseBody
  @PostMapping("/common/list")
  @RequiresPermissions("pro:other:view")
  public JsonResult commonList(ProdPlaModel param) {
    startPage();
    return jsonResult(prodTaskService.commonList(param));
  }

  /**
   * saveSchedulingPlan 保存设备类生产令排产计划
   *
   * @param prodNo 生产令
   * @param prodPlanListJson 排产计划JSON串
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/15 16:36
   */
  @ResponseBody
  @PostMapping("/scheduling/saveSchedulingPlan")
  @RequiresPermissions("pro:equipment:commit")
  public JsonResult saveSchedulingPlan(
      String prodNo, String prodPlanListJson, HttpServletRequest httpServletRequest) {
    String clientIp = IpUtil.getIpAddr(httpServletRequest);
    Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
    List<ProdPlaDetModel> prodPlaDetList =
        gson.fromJson(prodPlanListJson, new TypeToken<List<ProdPlaDetModel>>() {}.getType());
    for (int i = 0; i < prodPlaDetList.size(); i++) {
      prodPlaDetList.get(i).setPrpcIp(clientIp);
    }
    return prodTaskService.saveSchedulingPla(prodNo, prodPlaDetList);
  }

  /**
   * 普通计划变更
   * @param prodNo
   * @param prodPlanListJson
   * @param delPrpdIdArray
   * @param httpServletRequest
   * @return
   */
  @ResponseBody
  @PostMapping("/scheduling/saveChangeCommonPlan")
  @RequiresPermissions("pro:other:edit")
  public JsonResult saveChangeCommonPlan(
      String prodNo, String prodPlanListJson,Integer[] delPrpdIdArray,HttpServletRequest httpServletRequest) {
    String clientIp = IpUtil.getIpAddr(httpServletRequest);
    Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
    List<ProdPlaDetModel> prodPlaDetList =
        gson.fromJson(prodPlanListJson, new TypeToken<List<ProdPlaDetModel>>() {}.getType());
    for (int i = 0; i < prodPlaDetList.size(); i++) {
      prodPlaDetList.get(i).setPrpcIp(clientIp);
    }
    return prodTaskService.saveChangeCommonPlan(prodNo, prodPlaDetList,delPrpdIdArray);
  }

  /**
   * commonSaveSchedulingPlan 保存其他类产令排产计划
   *
   * @param prodNo 生产令
   * @param prodPlanListJson 排产计划JSON串
   * @param delPrpdIdArrayJson 删除的排产计划JSON串
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/2/1 9:52
   */
  @ResponseBody
  @PostMapping("/common/saveSchedulingPlan")
  @RequiresPermissions("pro:other:edit")
  public JsonResult commonSaveSchedulingPlan(
      String prodNo,
      String prodPlanListJson,
      String delPrpdIdArrayJson,
      HttpServletRequest httpServletRequest) {
    Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
    String clientIp = IpUtil.getIpAddr(httpServletRequest);
    List<ProdPlaDetModel> prodPlaDetList =
        gson.fromJson(prodPlanListJson, new TypeToken<List<ProdPlaDetModel>>() {}.getType());
    List<Integer> delPrpdIdList =
        gson.fromJson(delPrpdIdArrayJson, new TypeToken<List<Integer>>() {}.getType());
    for (int i = 0; i < prodPlaDetList.size(); i++) {
      prodPlaDetList.get(i).setPrpcIp(clientIp);
    }
    return prodTaskService.commonSaveSchedulingPlan(prodNo, prodPlaDetList, delPrpdIdList);
  }

  /**
   * commonSaveSchedulingPlanAndComplete 排产完成
   *
   * @param prodNo 生产令
   * @param prodPlanListJson 排产计划JSON串
   * @param delPrpdIdArrayJson 删除的排产计划JSON串
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/2/1 12:59
   */
  @ResponseBody
  @PostMapping("/common/saveSchedulingPlanAndComplete")
  @RequiresPermissions("pro:other:edit")
  public JsonResult commonSaveSchedulingPlanAndComplete(
      String prodNo,
      String prodPlanListJson,
      String delPrpdIdArrayJson,
      HttpServletRequest httpServletRequest) {
    Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
    String clientIp = IpUtil.getIpAddr(httpServletRequest);
    List<ProdPlaDetModel> prodPlaDetList = new ArrayList<>();
    if (!prodPlanListJson.equals("[[, ]]")) {
      prodPlaDetList =
          gson.fromJson(prodPlanListJson, new TypeToken<List<ProdPlaDetModel>>() {}.getType());
    }
    List<Integer> delPrpdIdList = new ArrayList<>();
    if (!delPrpdIdArrayJson.equals("[[, ]]")) {
      delPrpdIdList =
          gson.fromJson(delPrpdIdArrayJson, new TypeToken<List<Integer>>() {}.getType());
    }
    for (int i = 0; i < prodPlaDetList.size(); i++) {
      prodPlaDetList.get(i).setPrpcIp(clientIp);
    }
    if (prodPlaDetList.size() > 0) {
      JsonResult jsonResult =
          prodTaskService.commonSaveSchedulingPlan(prodNo, prodPlaDetList, delPrpdIdList);
      if (jsonResult.getType().getCode() == 200) {
        return prodTaskService.updateProdPlaPropIsSchByPropProdNo(prodNo, (byte) 1);
      } else {
        return jsonResult;
      }
    } else {
      return error("尊敬的用户，请添加排产计划！");
    }
  }

  /**
   * schedulingLoadDesignInfo 根据生产令获取该项目设计完成时间
   *
   * @param prodNo 生产令
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/16 11:09
   */
  @ResponseBody
  @PostMapping("/scheduling/loadDesignInfo")
  @RequiresPermissions("pro:equipment:edit")
  public JsonResult schedulingLoadDesignInfo(String prodNo) {
    return success().setData(prodTaskService.schedulingLoadDesignInfo(prodNo));
  }

  /**
   * schedulingEdit 排产任务池排产
   *
   * @param
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/15 13:31
   */
  @GetMapping("/scheduling/edit/{id}")
  @RequiresPermissions("pro:equipment:edit")
  public String schedulingEdit(@PathVariable("id") Integer id, Model model) {
    ProdOrdModel prodOrd = prodTaskService.getProdOrdByPrimaryKey(id);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute("tableItem", prodTaskService.findTotalDispatchPlanItem());
    ProdPla prodPla = prodTaskService.getProdPlaByPropProdNo(prodOrd.getProdNo());
    if (prodPla != null) {
      List<ProdPlaDet> prodPlaDetList =
          prodTaskService.findProdPlaDetListByPrpdPropId(prodPla.getPropId());
      model.addAttribute("prodPlaDetList", prodPlaDetList);
    }
    model.addAttribute("fou", ShiroUtils.getUser().getName());
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    model.addAttribute("creDat", formatter.format(new Date()));
    model.addAttribute("deptList", prodTaskService.findDeptList());
    return "prodTaskManager/scheduling/edit/page";
  }

  /**
   * commonEdit 普通任务池排产
   *
   * @param id
   * @param model
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/29 16:44
   */
  @GetMapping("/common/edit/{id}")
  @RequiresPermissions("pro:other:edit")
  public String commonEdit(@PathVariable("id") Integer id, Model model) {
    ProdOrdModel prodOrd = prodTaskService.getProdOrdByPrimaryKey(id);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute("fou", ShiroUtils.getUser().getName());
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    model.addAttribute("creDat", formatter.format(new Date()));
    return "prodTaskManager/common/edit/page";
  }

  /**
   * schedulingChange 变更
   *
   * @param id
   * @param model
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/27 13:10
   */
  @GetMapping("/scheduling/change/{id}")
  @RequiresPermissions(value={"pro:equipment:edit","pro:other:edit"},logical = Logical.OR)
  public String schedulingChange(@PathVariable("id") Integer id, Model model) {
    ProdOrdModel prodOrd = prodTaskService.getProdOrdByPrimaryKey(id);
    model.addAttribute("prodOrd", prodOrd);
    ProdPla prodPla = prodTaskService.getProdPlaByPropProdNo(prodOrd.getProdNo());
    if (prodPla != null) {
      List<ProdPlaDet> prodPlaDetList =
          prodTaskService.findProdPlaDetListByPrpdPropId(prodPla.getPropId());
      List<BaseData> baseDataList = prodTaskService.findTotalDispatchPlanItem();
      if(prodOrd.getProdTyp() == 1){
        for (int j = 0; j < baseDataList.size(); j++) {
          boolean isExist = false;
          for (int i = 0; i < prodPlaDetList.size(); i++) {
            if (baseDataList.get(j).getBadaCod().equals(prodPlaDetList.get(i).getPrpdCod())) {
              isExist = true;
              break;
            }
          }
          if (isExist == false) {
            BaseData baseData = baseDataList.get(j);
            ProdPlaDet newProdPlaDet = new ProdPlaDet();
            newProdPlaDet.setPrpdPropId(prodPla.getPropId());
            newProdPlaDet.setPrpdNam(baseData.getBadaNam());
            newProdPlaDet.setPrpdCod(baseData.getBadaCod());
            newProdPlaDet.setPrpdOrdNo(baseData.getBadaOrdNo());
            prodPlaDetList.add(newProdPlaDet);
          }
        }
      }
      model.addAttribute("prodPlaDetList", prodPlaDetList);
      model.addAttribute("baseDataList", baseDataList);
      List<SysDeptModel> deptModelList = prodTaskService.findDeptList();
      deptModelList.add(
          0,
          new SysDeptModel() {
            {
              setId(null);
              setName("");
            }
          });
      model.addAttribute("deptList", deptModelList);
      String tableTitle = "";
      if (prodOrd.getProdTyp() == 1) {
        tableTitle = "设备类项目排产";
      } else {
        tableTitle = "其他类项目排产";
      }
      model.addAttribute("tableTitle", tableTitle);
    }
    if (prodOrd.getProdTyp() == 1) {
      return "prodTaskManager/scheduling/change/page";
    } else {
      return "prodTaskManager/common/change/page";
    }
  }

  /**
   * schedulingEdit 总调计划编辑
   *
   * @param
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/15 13:31
   */
  @GetMapping("/scheduling/see/{id}")
  @RequiresPermissions(
      value = {"pro:equipment:view", "pro:other:view","pro:proPlanCheck:edit","pro:proMinisterialPlanCheck:view"},
      logical = Logical.OR)
  public String schedulingSee(@PathVariable("id") Integer id, Model model) {
    ProdOrdModel prodOrd = prodTaskService.getProdOrdByPrimaryKey(id);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute("tableItem", prodTaskService.findTotalDispatchPlanItem());
    ProdPla prodPla = prodTaskService.getProdPlaByPropProdNo(prodOrd.getProdNo());
    if (prodPla != null) {
      List<ProdPlaDet> prodPlaDetList =
          prodTaskService.findProdPlaDetListByPrpdPropId(prodPla.getPropId());
      model.addAttribute("prodPlaDetList", prodPlaDetList);
    }
    List<SysDeptModel> deptModelList = prodTaskService.findDeptList();
    deptModelList.add(
        0,
        new SysDeptModel() {
          {
            setId(null);
            setName("");
          }
        });
    model.addAttribute("deptList", deptModelList);
    String tableTitle = "";
    if (prodOrd.getProdTyp() == 1) {
      tableTitle = "设备类项目排产";
    } else {
      tableTitle = "其他类项目排产";
    }
    model.addAttribute("tableTitle", tableTitle);
    model.addAttribute("prodNo", prodOrd.getProdNo());
    return "prodTaskManager/scheduling/see/page";
  }
  /**
   * commonEdit 普通计划编辑
   *
   * @param
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/15 13:31
   */
  @GetMapping("/common/see/{id}")
  @RequiresPermissions(
      value = {"pro:equipment:view", "pro:other:view","pro:proPlanCheck:edit"},
      logical = Logical.OR)
  public String commonSee(@PathVariable("id") Integer id, Model model) {
    ProdOrdModel prodOrd = prodTaskService.getProdOrdByPrimaryKey(id);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute("tableItem", prodTaskService.findTotalDispatchPlanItem());
    ProdPla prodPla = prodTaskService.getProdPlaByPropProdNo(prodOrd.getProdNo());
    if (prodPla != null) {
      List<ProdPlaDet> prodPlaDetList =
          prodTaskService.findProdPlaDetListByPrpdPropId(prodPla.getPropId());
      model.addAttribute("prodPlaDetList", prodPlaDetList);
    }
    List<SysDeptModel> deptModelList = prodTaskService.findDeptList();
    deptModelList.add(
        0,
        new SysDeptModel() {
          {
            setId(null);
            setName("");
          }
        });
    model.addAttribute("deptList", deptModelList);
    String tableTitle = "";
    if (prodOrd.getProdTyp() == 1) {
      tableTitle = "设备类项目排产";
    } else {
      tableTitle = "其他类项目排产";
    }
    model.addAttribute("tableTitle", tableTitle);
    model.addAttribute("prodNo", prodOrd.getProdNo());
    return "prodTaskManager/common/see/page";
  }

  /**
   * schedulingEdit 总调计划编辑
   *
   * @param
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/15 13:31
   */
  @GetMapping("/scheduling/other/{id}/{mode}")
  @RequiresPermissions("pro:single:view")
  public String schedulingOther(
      @PathVariable("id") Integer id, @PathVariable("mode") String mode, Model model) {
    ProdOrdModel prodOrd = prodTaskService.getProdOrdByPrimaryKey(id);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute("tableItem", prodTaskService.findTotalDispatchPlanItem());
    ProdPla prodPla = prodTaskService.getProdPlaByPropProdNo(prodOrd.getProdNo());
    if (prodPla != null && prodPla.getPropSta() == 5) {
      List<ProdPlaDet> prodPlaDetList =
          prodTaskService.findProdPlaDetListByPrpdPropId(prodPla.getPropId());
      model.addAttribute("prodPlaDetList", prodPlaDetList);
    }
    List<SysDeptModel> deptModelList = prodTaskService.findDeptList();
    deptModelList.add(
        0,
        new SysDeptModel() {
          {
            setId(null);
            setName("");
          }
        });
    model.addAttribute("deptList", deptModelList);
    String tableTitle = "";
    if (prodOrd.getProdTyp() == 1) {
      tableTitle = "设备类项目排产";
    } else {
      tableTitle = "其他类项目排产";
    }
    model.addAttribute("tableTitle", tableTitle);
    if (mode.equals("other")) {
      model.addAttribute("mode", 1);
    }
    return "prodTaskManager/scheduling/see/page";
  }

  /**
   * ProdOrdQuerySingle 跳转到设备类单生产令看板
   *
   * @param prodNo 生产令号
   * @param model
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/16 12:41
   */
  @GetMapping("/prodOrdQuery/single/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String prodOrdQuerySingle(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrd prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    model.addAttribute("prodNo", prodOrd.getProdNo());
    model.addAttribute("proCode", prodOrd.getProdProCod());
    return "prodTaskManager/prodOrderQuery/single/page";
  }

  /**
   * prodOrdQuerySingleOther 跳转到其他类单生产令看板
   *
   * @param prodNo 生产令号
   * @param model
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/2/3 15:33
   */
  @GetMapping("/prodOrdQuery/singleOther/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String prodOrdQuerySingleOther(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrdModel prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute("taskList", prodTaskService.findProdFacListBy(prodNo));
    return "prodTaskManager/prodOrderQuery/singleOther/page";
  }

  /**
   * prodOrdQueryMultiple 跳转到生产进度看板
   *
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/2/2 13:50
   */
  @GetMapping("/prodOrdQuery/multiple")
  @RequiresPermissions("pro:proProgress:view")
  public String prodOrdQueryMultiple() {
    return "prodTaskManager/prodOrderQuery/multiple/page";
  }

  /**
   * ProdOrdQuerySingleForPlan 根据生产令查询排产计划列表、生产任务和计划反馈信息
   *
   * @param prodNo
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/16 12:44
   */
  @ResponseBody
  @PostMapping("/prodOrdQuerySingle/planTaskAndRet")
  @RequiresPermissions("pro:single:view")
  public JsonResult prodOrdQuerySingleForPlanTaskAndRet(String prodNo) {
    Map<String, Object> map = new HashMap<>();
    map.put("planList", prodTaskService.findProdPlanListByProdNo(prodNo));
    map.put("taskTypeList", prodTaskService.findProdTaskTypeListByProdNo(prodNo));
    map.put("taskList", prodTaskService.findProdTaskListByProdNo(prodNo));
    map.put("retList", prodTaskService.findProdPlanRetInfoListByProdNo(prodNo));
    return success().setData(map);
  }

  /**
   * @methodName: getDesignStatus
   * @description: 获取设计状态
   * @param: prodNo
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/6 14:54
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/prodOrdQuerySingle/getDesignStatus")
  public JsonResult getDesignStatus(VwProject param) {
    VwProject vwProject = prodTaskService.getVwProjectByProCode(param.getProCode());
    VwProStatus vwProStatus = prodTaskService.getVwProStatusByProId(vwProject.getProId());
    if(vwProStatus!=null){
      return success().setData(vwProStatus.getDesignStatus());
    }else{
      return success().setData(1);
    }
  }

  /**
   * @methodName: getCraftStatus
   * @description: 获取工艺状态
   * @param: param
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/6 15:48
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/prodOrdQuerySingle/getCraftStatus")
  public JsonResult getCraftStatus(VwProject param) {
    VwProject vwProject = prodTaskService.getVwProjectByProCode(param.getProCode());
    VwCraTaskDetail vwCraTaskDetail = prodTaskService.getVwCraTaskDetailByProId(vwProject.getProId());
    if(vwCraTaskDetail!=null){
      return success().setData(vwCraTaskDetail.getCraftStatus());
    }else{
      return success().setData(1);
    }
  }
  /**
   * @methodName: getMaterialStatus
   * @description: 获取原材料状态
   * @param: param
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/6 16:02
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/prodOrdQuerySingle/getMaterialStatus")
  public JsonResult getMaterialStatus(VwProject param) {
    VwProject vwProject = prodTaskService.getVwProjectByProCode(param.getProCode());
    VwCraTaskDetail vwCraTaskDetail = prodTaskService.getVwCraTaskDetailByProId(vwProject.getProId());
    if(vwCraTaskDetail!=null){
      return success().setData(vwCraTaskDetail.getMaterialStatus());
    }else{
      return success().setData(1);
    }
  }
  /**
   * @methodName: getOutsourcingStatus
   * @description: 获取外协状态
   * @param: param
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/6 16:03
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/prodOrdQuerySingle/getOutsourcingStatus")
  public JsonResult getOutsourcingStatus(VwProject param) {
    VwProject vwProject = prodTaskService.getVwProjectByProCode(param.getProCode());
    VwCraTaskDetail vwCraTaskDetail = prodTaskService.getVwCraTaskDetailByProId(vwProject.getProId());
    if(vwCraTaskDetail!=null){
      return success().setData(vwCraTaskDetail.getOutsourcingStatus());
    }else{
      return success().setData(1);
    }
  }

  /**
   * schedulingSubmit 提交排产计划
   *
   * @param prodIdStr 生产令主键
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/27 8:44
   */
  @ResponseBody
  @PostMapping("/scheduling/submit")
  @RequiresPermissions(
      value = {"pro:equipment:commit", "pro:other:edit"},
      logical = Logical.OR)
  public JsonResult schedulingSubmit(String prodIdStr) {
    String[] prodIdArr = prodIdStr.split(",");
    return prodTaskService.schedulingSubmit(prodIdArr);
  }

  /**
   * loadApplicantList 根据名字获取申请人姓名列表
   *
   * @param name 申请人名字
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/27 9:40
   */
  @ResponseBody
  @PostMapping("/loadApplicantList")
  @RequiresPermissions("pro:proPlanCheck:view")
  public JsonResult loadApplicantList(String name) {
    return success().setData(prodTaskService.findApplicantList(name));
  }

  /**
   * loadAuditList 加载总调计划审核列表
   *
   * @param param 检索条件
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/27 9:55
   */
  @ResponseBody
  @PostMapping("/audit/list")
  @RequiresPermissions("pro:proPlanCheck:view")
  public JsonResult loadAuditList(ProdPlaModel param) {
    startPage();
    return jsonResult(prodTaskService.findAuditList(param));
  }
  /**
   * @methodName: loadMinisterialAuditList
   * @description: 加载部级审核列表
   * @param: param
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺
   * @date： 2021/3/23 16:06
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/audit/listMinisterial")
  @RequiresPermissions("pro:proMinisterialPlanCheck:view")
  public JsonResult loadMinisterialAuditList(ProdPlaModel param) {
    startPage();
    return jsonResult(prodTaskService.loadMinisterialAuditList(param));
  }

  /**
   * gotoAudit 跳转到审核页面
   *
   * @param prodId 生产令表主键
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/27 10:43
   */
  @GetMapping("/goto/audit/{prodId}")
  @RequiresPermissions("pro:proPlanCheck:edit")
  public String gotoAudit(@PathVariable("prodId") Integer prodId, Model model) {
    ProdOrdModel prodOrd = prodTaskService.getProdOrdByPrimaryKey(prodId);
    model.addAttribute("prodOrd", prodOrd);
    ProdPla prodPla = prodTaskService.getProdPlaByPropProdNo(prodOrd.getProdNo());
    model.addAttribute("prodPla", prodPla);
    if (prodPla != null) {
      List<ProdPlaDet> prodPlaDetList =
          prodTaskService.findProdPlaDetListByPrpdPropId(prodPla.getPropId());
      model.addAttribute("prodPlaDetList", prodPlaDetList);
    }
    List<SysDeptModel> deptModelList = prodTaskService.findDeptList();
    deptModelList.add(
        0,
        new SysDeptModel() {
          {
            setId(null);
            setName("");
          }
        });
    model.addAttribute("deptList", deptModelList);
    if (prodPla.getPropIsCha() != null && prodPla.getPropIsCha() == 1) {
      return "prodTaskManager/audit/change/page";
    } else {
      return "prodTaskManager/audit/info/page";
    }
  }
  @GetMapping("/goto/auditMinisterial/{prodId}")
  @RequiresPermissions("pro:proMinisterialPlanCheck:view")
  public String gotoAuditMinisterial(@PathVariable("prodId") Integer prodId, Model model) {
    ProdOrdModel prodOrd = prodTaskService.getProdOrdByPrimaryKey(prodId);
    model.addAttribute("prodOrd", prodOrd);
    ProdPla prodPla = prodTaskService.getProdPlaByPropProdNo(prodOrd.getProdNo());
    model.addAttribute("prodPla", prodPla);
    if (prodPla != null) {
      List<ProdPlaDet> prodPlaDetList =
          prodTaskService.findProdPlaDetListByPrpdPropId(prodPla.getPropId());
      model.addAttribute("prodPlaDetList", prodPlaDetList);
    }
    List<SysDeptModel> deptModelList = prodTaskService.findDeptList();
    deptModelList.add(
        0,
        new SysDeptModel() {
          {
            setId(null);
            setName("");
          }
        });
    model.addAttribute("deptList", deptModelList);
    if (prodPla.getPropIsCha() != null && prodPla.getPropIsCha() == 1) {
      return "prodTaskManager/ministerialAudit/change/page";
    } else {
      return "prodTaskManager/ministerialAudit/info/page";
    }
  }

  /**
   * auditReject 驳回
   *
   * @param prodPlaModel
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/27 11:18
   */
  @ResponseBody
  @PostMapping("/audit/reject")
  @RequiresPermissions("pro:proPlanCheck:edit")
  public JsonResult auditReject(ProdPlaModel prodPlaModel) {
    return prodTaskService.auditReject(prodPlaModel);
  }
  /**
   * @methodName: ministerialAuditReject
   * @description: 驳回
   * @param: prodPlaModel
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺
   * @date： 2021/3/23 16:42
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/ministerialAudit/reject")
  @RequiresPermissions("pro:proMinisterialPlanCheck:edit")
  public JsonResult ministerialAuditReject(ProdPlaModel prodPlaModel) {
    return prodTaskService.ministerialAuditReject(prodPlaModel);
  }

  /**
   * auditAgree 同意
   *
   * @param prodPlaModel
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/27 12:30
   */
  @ResponseBody
  @PostMapping("/audit/agree")
  @RequiresPermissions("pro:proPlanCheck:edit")
  public JsonResult auditAgree(ProdPlaModel prodPlaModel) {
    return prodTaskService.auditAgree(prodPlaModel);
  }
  /**
   * @methodName: ministerialAuditAgree
   * @description: 部级审核通过
   * @param: prodPlaModel
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺
   * @date： 2021/3/23 16:24
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/ministerialAudit/agree")
  @RequiresPermissions("pro:proMinisterialPlanCheck:edit")
  public JsonResult ministerialAuditAgree(ProdPlaModel prodPlaModel) {
    return prodTaskService.ministerialAuditAgree(prodPlaModel);
  }

  /**
   * planManagePage 跳转到计划信息管理页面
   *
   * @param
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/27 14:38
   */
  @GetMapping("/planManage")
  public String planManagePage(Model model) {
    // 获取总调计划类别列表
    model.addAttribute("planBadaTyp2List", prodTaskService.findPlanBadaTyp2List());
    return "baseManager/planManage/page";
  }

  /**
   * retManagePage 跳转到反馈信息管理页面
   *
   * @param model
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/1/27 16:25
   */
  @GetMapping("/retManage")
  public String retManagePage(Model model) {
    // 获取总调计划类别列表
    model.addAttribute("planBadaTyp2List", prodTaskService.findPlanBadaTyp2List());
    return "baseManager/retManage/page";
  }

  /**
   * basePlanList 总调计划基础信息维护列表
   *
   * @param
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/27 14:43
   */
  @ResponseBody
  @PostMapping("/base/planList")
  public JsonResult basePlanList() {
    startPage();
    return jsonResult(prodTaskService.findBasePlanList());
  }

  /**
   * baseGetRetInf 根据主键获取反馈信息数据
   *
   * @param badaId 主键
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/28 10:27
   */
  @ResponseBody
  @PostMapping("/base/getRetInf")
  public JsonResult baseGetRetInf(Integer badaId) {
    return success().setData(prodTaskService.baseGetRetInf(badaId));
  }

  /**
   * baseAddPlan 添加计划信息
   *
   * @param baseData 计划信息
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/27 15:06
   */
  @ResponseBody
  @PostMapping("/base/addPla")
  public JsonResult baseAddPla(BaseData baseData) {
    return prodTaskService.baseAddPlan(baseData);
  }

  @ResponseBody
  /**
   * baseAddOrEditRet 添加或编辑反馈信息
   *
   * @param baseData 反馈信息
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/28 10:58
   */
  @PostMapping("/base/addOrEditRet")
  public JsonResult baseAddOrEditRet(BaseData baseData) {
    return prodTaskService.baseAddOrEditRet(baseData);
  }

  /**
   * baseRemovePla 删除计划信息
   *
   * @param baseData
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/27 15:56
   */
  @ResponseBody
  @PostMapping("/base/removePla")
  public JsonResult baseRemovePla(BaseData baseData) {
    return prodTaskService.baseRemovePla(baseData);
  }

  /**
   * baseRemoveRet 删除反馈信息
   *
   * @param baseData
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/28 11:24
   */
  @ResponseBody
  @PostMapping("/base/removeRet")
  public JsonResult baseRemoveRet(BaseData baseData) {
    return prodTaskService.baseRemoveRet(baseData);
  }

  /**
   * changeQueryList 获取变更查询列表
   *
   * @param param 查询条件
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/29 10:15
   */
  @ResponseBody
  @PostMapping("/changeQuery/list")
  @RequiresPermissions("pro:proPlanChange:view")
  public JsonResult changeQueryList(ProdPlaCha param) {
    startPage();
    return jsonResult(prodTaskService.findChangeQueryList(param));
  }

  /**
   * commonLoadPlanData 根据生产令编号获取计划数据
   *
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/1/30 9:00
   */
  @ResponseBody
  @PostMapping("/common/loadPlanTemplateData")
  @RequiresPermissions(
      value = {"pro:single:view", "pro:other:edit"},
      logical = Logical.OR)
  public JsonResult commonLoadPlanTemplateData() {
    return success().setData(prodTaskService.findCommonLoadPlanTemplateData());
  }
  /**
   * @methodName: commonloadDeptLis
   * @description: 加载普通任务池编辑页面部门列表
   * @param:
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18941916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/3/26 10:42
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/common/loadDeptLis")
  @RequiresPermissions(
      value = {"pro:other:edit"},
      logical = Logical.OR)
  public JsonResult commonLoadDeptLis() {
    return success().setData(prodTaskService.findDeptList());
  }

  /**
   * commonLoadExistPlanData 根据生产令号获取计划列表
   *
   * @param prodOrdNo 生产令编号
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/2/1 10:32
   */
  @ResponseBody
  @PostMapping("/common/loadExistPlanData")
  @RequiresPermissions(
      value = {"pro:single:view", "pro:other:edit"},
      logical = Logical.OR)
  public JsonResult commonLoadExistPlanData(String prodOrdNo) {
    return success().setData(prodTaskService.findCommonLoadExistPlanData(prodOrdNo));
  }

  /**
   * facPlaEdiAndRetList 根据搜索条件获取生产计划编辑与反馈页面的列表
   *
   * @param param 搜索条件
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/2/1 14:25
   */
  @ResponseBody
  @PostMapping("/facPlaEdiAndRet/list")
  @RequiresPermissions("pro:productPlan:view")
  public JsonResult facPlaEdiAndRetList(ProdPlaDetModel param) {
    startPage();
    return jsonResult(prodTaskService.findFacPlaEdiAndRetList(param));
  }

  /**
   * saveEditRetSta 保存反馈编辑状态
   *
   * @param param 主键和反馈编辑状态
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/2/1 15:36
   */
  @ResponseBody
  @PostMapping("/facPlaEdiAndRet/saveEditRetSta")
  @RequiresPermissions("pro:productPlan:feedback")
  public JsonResult saveEditRetSta(ProdPlaDetModel param) {
    return prodTaskService.saveEditRetSta(param);
  }

  /**
   * gotoFacPlaEdiAndRetAddPage 跳转到生产计划编辑的页面
   *
   * @param
   * @return java.lang.String
   * @author 徐一贺
   * @date 2021/2/1 16:00
   */
  @GetMapping("/facPlaEdiAndRet/add")
  @RequiresPermissions("pro:productPlan:edit")
  public String gotoFacPlaEdiAndRetAddPage() {
    return "prodTaskManager/factoryPlanEditAndReturn/edit/page";
  }

  /**
   * facPlaEdiAndRetSave facPlaEdiAndRetSave 保存生产计划编辑
   *
   * @param prodFacListJson 生产计划
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/2/2 11:15
   */
  @ResponseBody
  @PostMapping("/facPlaEdiAndRet/save")
  @RequiresPermissions("pro:productPlan:edit")
  public JsonResult facPlaEdiAndRetSave(String prodFacListJson) {
    Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
    List<ProdFac> prodFacList =
        gson.fromJson(prodFacListJson, new TypeToken<List<ProdFac>>() {}.getType());
    return prodTaskService.facPlaEdiAndRetSave(prodFacList);
  }

  /**
   * removeDevicesClass 删除设备类的二级计划
   *
   * @param id 主键
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/2/2 12:48
   */
  @ResponseBody
  @PostMapping("/facPlaEdiAndRet/removeDevicesClass")
  @RequiresPermissions("pro:productPlan:del")
  public JsonResult removeDevicesClass(Integer id) {
    return prodTaskService.removeDevicesClass(id);
  }

  /**
   * removeOtherClass 删除其他类的一级计划
   *
   * @param id 主键
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/2/2 13:08
   */
  @ResponseBody
  @PostMapping("/facPlaEdiAndRet/removeOtherClass")
  @RequiresPermissions("pro:productPlan:del")
  public JsonResult removeOtherClass(Integer id) {
    return prodTaskService.removeOtherClass(id);
  }

  /**
   * prodOrdQueryList 根据条件查询生产进度看板列表
   *
   * @param param 检索条件
   * @return com.zw.mes.common.JsonResult
   * @author 徐一贺
   * @date 2021/2/2 15:04
   */
  @ResponseBody
  @PostMapping("/prodOrdQuery/list")
  @RequiresPermissions("pro:proProgress:view")
  public JsonResult prodOrdQueryList(ProdOrderQueryModel param) {
    startPage();
    return jsonResult(prodTaskService.findProdOrdQueryList(param));
  }

  /**
   * 单项目看板跳转到制作件清单查看页
   *
   * @param prodNo 生产令编号
   * @param model 渲染模型
   * @return 页面路径
   * @author 徐一贺
   * @date 2021/2/23 13:55
   */
  @GetMapping("/productionListview/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String productionListview(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrd prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    VwProject project = prodTaskService.getVwProjectByProCode(prodOrd.getProdProCod());
    model.addAttribute("project", project);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute(
        "specialList", prodTaskService.getSpecialListByProCode(project.getProCode()));
    return "prodTaskManager/prodOrderQuery/single/productionListView/page";
  }

  /**
   * 单项目看板跳转到外购件计划查看页
   *
   * @param prodNo 生产令编号
   * @param model 渲染模型
   * @return 页面路径
   * @author 徐一贺
   * @date 2021/2/23 13:55
   */
  @GetMapping("/purPlanListView/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String purPlanListView(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrd prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    VwProject project = prodTaskService.getVwProjectByProCode(prodOrd.getProdProCod());
    model.addAttribute("project", project);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute(
        "specialList", prodTaskService.getPurSpecialListByProCode(project.getProCode()));
    return "prodTaskManager/prodOrderQuery/single/purPlanListView/page";
  }

  /**
   * 单项目看板跳转到原材料计划查看页
   *
   * @param prodNo 生产令编号
   * @param model 渲染模型
   * @return 页面路径
   * @author 徐一贺
   * @date 2021/2/23 13:55
   */
  @GetMapping("/rawMatPlanListView/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String rawMatPlanListView(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrd prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    VwProject project = prodTaskService.getVwProjectByProCode(prodOrd.getProdProCod());
    model.addAttribute("project", project);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute(
        "specialList", prodTaskService.getRawMatSpecialListByProCode(project.getProCode()));
    return "prodTaskManager/prodOrderQuery/single/rawMatPlanListView/page";
  }

  /**
   * 单项目看板跳转到外协件计划查看页
   *
   * @param prodNo 生产令编号
   * @param model 渲染模型
   * @return 页面路径
   * @author 徐一贺
   * @date 2021/2/23 13:55
   */
  @GetMapping("/outPlanListView/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String outPlanListViewView(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrd prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    VwProject project = prodTaskService.getVwProjectByProCode(prodOrd.getProdProCod());
    model.addAttribute("project", project);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute(
        "specialList", prodTaskService.getOutSpecialListByProCode(project.getProCode()));
    return "prodTaskManager/prodOrderQuery/single/outPlanListView/page";
  }

  /**
   * 工艺卡列表查看页
   *
   * @param prodNo
   * @param model
   * @return
   * @author 徐一贺
   * @date 2021/2/24 16:06
   */
  @GetMapping("/processCardListView/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String processCardListView(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrd prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    VwProject project = prodTaskService.getVwProjectByProCode(prodOrd.getProdProCod());
    model.addAttribute("project", project);
    model.addAttribute("prodOrd", prodOrd);
    model.addAttribute(
        "specialList", prodTaskService.getProcessCardSpecialListByProCode(project.getProCode()));
    return "prodTaskManager/prodOrderQuery/single/processCardListView/page";
  }
  /**
   * couTskView 下料任务查看页
   *
   * @param prodNo
   * @param model
   * @return
   * @author 徐一贺
   * @date 2021/2/25 10:57
   */
  @GetMapping("/cutTaskView/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String cutTaskView(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrd prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    model.addAttribute("project", prodTaskService.getVwProjectByProCode(prodOrd.getProdProCod()));
    model.addAttribute("prodOrd", prodOrd);
    return "prodTaskManager/prodOrderQuery/single/cutTaskView/page";
  }
  /**
   * assemblySheetListView 装配派工单查看页
   *
   * @param prodNo
   * @param model
   * @return
   * @author 徐一贺
   * @date 2021/2/25 10:57
   */
  @GetMapping("/assemblySheetListView/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String assemblySheetListView(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrd prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    model.addAttribute("project", prodTaskService.getVwProjectByProCode(prodOrd.getProdProCod()));
    model.addAttribute("prodOrd", prodOrd);
    return "prodTaskManager/prodOrderQuery/single/assemblySheetListView/page";
  }
  /**
   * assemblySheetListView 装配进度查看页
   *
   * @param prodNo
   * @param model
   * @return
   * @author 徐一贺
   * @date 2021/2/25 10:57
   */
  @GetMapping("/assemblyListView/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String assemblyListView(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrd prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    model.addAttribute("project", prodTaskService.getVwProjectByProCode(prodOrd.getProdProCod()));
    model.addAttribute("prodOrd", prodOrd);
    return "prodTaskManager/prodOrderQuery/single/assemblyListView/page";
  }
  /**
   * installListView 安装进度查看页
   *
   * @param prodNo
   * @param model
   * @return
   * @author 徐一贺
   * @date 2021/2/27 10:07
   */
  @GetMapping("/installListView/{prodNo}")
  @RequiresPermissions("pro:single:view")
  public String installListView(@PathVariable("prodNo") String prodNo, Model model) {
    ProdOrd prodOrd = prodTaskService.getProdOrdByPropProdNo(prodNo);
    model.addAttribute("project", prodTaskService.getVwProjectByProCode(prodOrd.getProdProCod()));
    model.addAttribute("prodOrd", prodOrd);
    return "prodTaskManager/prodOrderQuery/single/installListView/page";
  }

  /**
   * 装配进度查看列表
   *
   * @param param
   * @return
   * @author 徐一贺
   * @date 2021/2/24 16:06
   */
  @ResponseBody
  @PostMapping("/assemblyListView/list")
  @RequiresPermissions("pro:single:view")
  public JsonResult assemblyListViewList(AsseAssemblySheetModel param) {
    startPage();
    return jsonResult(prodTaskService.findAssemblyListViewList(param));
  }
  /**
   * 获取制作件清单主单列表
   *
   * @param param
   * @return
   * @author 徐一贺
   * @date 2021/2/24 16:06
   */
  @ResponseBody
  @PostMapping("/productionListView/list")
  @RequiresPermissions("pro:single:view")
  public JsonResult productionListViewList(VwDsnMakeResultModel param) {
    startPage();
    return jsonResult(prodTaskService.findProductionListViewList(param));
  }

  /**
   * 获取外购件清单主单列表
   *
   * @param param
   * @return
   * @author 徐一贺
   * @date 2021/2/24 16:06
   */
  @ResponseBody
  @PostMapping("/purPlanListView/list")
  @RequiresPermissions("pro:single:view")
  public JsonResult purPlanListViewList(VwRepResultModel param) {
    startPage();
    return jsonResult(prodTaskService.findPurPlanListViewList(param));
  }

  /**
   * 获取原材料清单主单列表
   *
   * @param param
   * @return
   * @author 徐一贺
   * @date 2021/2/24 16:06
   */
  @ResponseBody
  @PostMapping("/rawMatPlanListView/list")
  @RequiresPermissions("pro:single:view")
  public JsonResult rawMatPlanListViewList(VwRepResultModel param) {
    startPage();
    return jsonResult(prodTaskService.findRawMatPlanListViewList(param));
  }

  /**
   * 获取外协件清单主单列表
   *
   * @param param
   * @return
   * @author 徐一贺
   * @date 2021/2/24 16:06
   */
  @ResponseBody
  @PostMapping("/outPlanListView/list")
  @RequiresPermissions("pro:single:view")
  public JsonResult outPlanListViewList(VwRepResultModel param) {
    startPage();
    return jsonResult(prodTaskService.findOutPlanListViewList(param));
  }

  /**
   * 获取工艺卡查看主单列表
   *
   * @param param
   * @return
   * @author 徐一贺
   * @date 2021/2/24 16:06
   */
  @ResponseBody
  @PostMapping("/processCardListView/list")
  @RequiresPermissions("pro:single:view")
  public JsonResult processCardListViewList(VwCraCardSheetModel param) {
    startPage();
    return jsonResult(prodTaskService.findProcessCardListViewList(param));
  }

  /**
   * 获取工艺卡零件级列表
   *
   * @param param
   * @return
   */
  @ResponseBody
  @PostMapping("/processPartsList/list")
  @RequiresPermissions("pro:single:view")
  public JsonResult processPartsList(VwCraCardSheetModel param) {
    startPage();
    return jsonResult(prodTaskService.findProcessPartsList(param));
  }
  /**
   * 下料任务查看
   *
   * @param param
   * @return
   */
  @ResponseBody
  @PostMapping("/cutTaskView/list")
  @RequiresPermissions("pro:single:view")
  public JsonResult cutTaskViewList(ProdCuttingDetailModel param) {
    startPage();
    return jsonResult(prodTaskService.cutTaskViewList(param));
  }
  /**
   * 装配派工单查看
   *
   * @param param
   * @return
   */
  @ResponseBody
  @PostMapping("/assemblySheetListView/list")
  @RequiresPermissions("pro:single:view")
  public JsonResult assemblySheetListViewList(AsseAssemblySheetModel param) {
    startPage();
    return jsonResult(prodTaskService.findAssemblySheetListViewList(param));
  }
  /**
   * 安装进度查看
   *
   * @param param
   * @return
   */
  @ResponseBody
  @PostMapping("/installListView/list")
  @RequiresPermissions("pro:single:view")
  public JsonResult installListViewList(InstDispatchingListModel param) {
    startPage();
    return jsonResult(prodTaskService.findInstallListViewList(param));
  }

  /**
   * 跳转到 工艺卡零件列表页
   *
   * @param model 页面渲染模型
   * @param proCode 项目编号
   * @param special 类型
   * @param part 部分
   * @param createName 创建者名称
   * @param branchName 创建者部门
   * @return java.lang.String 页面路径
   * @author 徐一贺
   * @date 2021/2/24 16:06
   */
  @GetMapping(
      "processCardListView/gotoProcessPartsListPage/{proCode}/{special}/{part}/{createName}/{branchName}")
  @RequiresPermissions("pro:single:view")
  public String gotoProcessPartsListPage(
      Model model,
      @PathVariable("proCode") String proCode,
      @PathVariable("special") String special,
      @PathVariable("part") String part,
      @PathVariable("createName") String createName,
      @PathVariable("branchName") String branchName) {
    model.addAttribute("proCode", proCode);
    model.addAttribute("special", special);
    model.addAttribute("part", part);
    model.addAttribute("createName", createName);
    model.addAttribute("branchName", branchName);
    model.addAttribute("project", prodTaskService.getVwProjectByProCode(proCode));
    return "prodTaskManager/prodOrderQuery/single/processCardListView/list/page";
  }

  /**
   * 跳转到总调计划查询
   *
   * @return
   */
  @GetMapping("/planQuery")
  @RequiresPermissions("pro:masterPlan:view")
  public String planQuery() {
    return "prodTaskManager/planQuery/page";
  }

  /**
   * 根据条件获取总调计划查询列表
   *
   * @return
   */
  @ResponseBody
  @PostMapping("/planQuery/list")
  @RequiresPermissions("pro:masterPlan:view")
  public JsonResult planQueryList(PlanQueryModel param) {
    startPage();
    return jsonResult(prodTaskService.findPlanQueryList(param));
  }

  /**
   * 根据生产令编号获取对应的厂级计划列表
   *
   * @param profProdNo
   * @return
   */
  @ResponseBody
  @PostMapping("/getFactoryPlanEditAndReturnListByProfProdNo")
  @RequiresPermissions("pro:productPlan:view")
  public JsonResult getFactoryPlanEditAndReturnListByProfProdNo(String profProdNo) {
    return prodTaskService.getFactoryPlanEditAndReturnListByProfProdNo(profProdNo);
  }

  /**
   * 保存厂级计划编辑与反馈
   *
   * @param data
   * @return
   */
  @ResponseBody
  @PostMapping("/saveFactoryPlanEditAndReturnList")
  @RequiresPermissions("pro:productPlan:edit")
  public JsonResult saveFactoryPlanEditAndReturnList(String data) {
    return prodTaskService.saveFactoryPlanEditAndReturnList(data);
  }
  /**
   * 删除厂级计划编辑与反馈
   *
   * @param profId
   * @return
   */
  @ResponseBody
  @PostMapping("/removeFactoryPlanEditAndReturnListByProfId")
  @RequiresPermissions("pro:productPlan:edit")
  public JsonResult removeFactoryPlanEditAndReturnListByProfId(Integer profId) {
    return prodTaskService.removeFactoryPlanEditAndReturnListByProfId(profId);
  }


  /**
   * 生产进度看板列表 导出
   * @param param 查询条件
   * @return list
   */
  @ResponseBody
  @GetMapping("/prodOrdQuery/exportExcelBySearch")
  @RequiresPermissions("pro:proProgress:export")
  public void exportExcel(HttpServletResponse response, ProdOrderQueryModel param) {
    prodTaskService.exportExcel(response,param);
  }
  /**
   * @methodName: getDeptList
   * @description: 获取部门列表
   * @param:
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺
   * @date： 2021/3/26 9:02
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/scheduling/getDeptList")
  public JsonResult getDeptList(){
    List<SysDeptModel> deptModelList = prodTaskService.findDeptList();
    return success().setData(deptModelList);
  }

  /**
   * @methodName: saveCommonPlanRet
   * @description: 保存普通计划反馈信息
   * @param: commonPlanRetJson
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺
   * @date： 2021/3/26 9:03
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/saveCommonPlanRet")
  public JsonResult saveCommonPlanRet(String commonPlanRetJson){
    Gson gson = new Gson();
    List<ProdPlaDet> prodPlaDetList= gson.fromJson(commonPlanRetJson, new com.google.common.reflect.TypeToken<List<ProdPlaDet>>() {
    }.getType());
    return prodTaskService.saveCommonPlanRet(prodPlaDetList);
  }

  /**
   * @methodName: checkProdPlaExist
   * @description: 检测项目号下是否有计划
   * @param: prodNo
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/6 9:57
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/checkProdPlaExist")
  @RequiresPermissions("pro:retTask:edit")
  public JsonResult checkProdPlaExist(String prodNo){
    ProdPla prodPla = prodTaskService.getProdPlaByPropProdNo(prodNo);
    if(prodPla!=null && prodPla.getPropSta().intValue() == 5){
      return success();
    }else {
      return error("该生产令未创建总调计划或未通过审核，请创建该项目的总调计划并通过审核！");
    }
  }

  /**
   * @methodName: taskEditList
   * @description: 根据总调计划表主键获取要编辑的任务列表
   * @param: protPropId
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/6 10:22
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/taskEditList")
  @RequiresPermissions("pro:retTask:edit")
  public JsonResult taskEditList(Integer protPropId){
    startPage();
    return jsonResult(prodTaskService.findTaskEditList(protPropId));
  }
  /**
   * @methodName: returnEditList
   * @description: 根据总调计划表主键获取要编辑的反馈列表
   * @param: prprPropId
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/6 10:33
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/returnEditList")
  @RequiresPermissions("pro:retTask:edit")
  public JsonResult returnEditList(Integer prprPropId){
    startPage();
    return jsonResult(prodTaskService.returnEditList(prprPropId));
  }

  /**
   * @methodName: saveTaskSta
   * @description: 保存任务状态
   * @param: prodTas
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/6 12:48
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/saveTaskSta")
  @RequiresPermissions("pro:retTask:edit")
  public JsonResult saveTaskSta(ProdTas prodTas){
    return prodTaskService.saveTaskSta(prodTas);
  }
  /**
   * @methodName: saveReturn
   * @description: 保存反馈时间
   * @param: prodTas
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/6 13:50
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/saveReturn")
  @RequiresPermissions("pro:retTask:edit")
  public JsonResult saveReturn(ProdPlaRet prodPlaRet){
    return prodTaskService.saveReturn(prodPlaRet);
  }
  /**
   * 查询任务状态
   * @param proCode
   * @return
   */
  @ResponseBody
  @PostMapping("/selectProjectTask")
  @RequiresPermissions("pro:taskIsNeed:edit")
  public JsonResult selectProjectTask(@RequestParam("proCode") String proCode){
    JsonResult jsonResult=new JsonResult();
    jsonResult.setType(JsonResult.ResultType.SUCCESS);
    VwProject project = prodTaskService.getVwProjectByProCode(proCode);
    jsonResult.setData(prodTaskService.selectProjectTask(project.getProId()));
    return jsonResult;
  }

  /**
   * @methodName: saveTaskStatus
   * @description: 保存工艺和调试的任务状态
   * @param: param
   * @return： com.zw.mes.common.JsonResult
   * @exception：
   * @author： 徐一贺 tel:18341916590
   * @designer： 陈欣，盖世奇
   * @leader： 陈欣 tel:18104194240
   * @date： 2021/4/10 10:03
   * @office: 智能控制设计科
   * @research institute： 智能控制设计所
   * @department： 机械设计院
   * @company: 辽宁忠旺机械设备制造有限公司
   * @group： 忠旺集团
   * @version: 1.0
   */
  @ResponseBody
  @PostMapping("/saveTaskStatus")
  @RequiresPermissions("pro:taskIsNeed:edit")
  public JsonResult saveTaskStatus(VwProStatus param){
    VwProject project = prodTaskService.getVwProjectByProCode(param.getProCode());
    param.setProId(project.getProId());
    return prodTaskService.saveTaskStatus(param);
  }
}
